package com.myBase.core.util;

import java.util.Enumeration;
import java.util.Properties;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

/**
 * 
 *     
 * 项目名称：core-model    
 * 类名称：EncryptPropertyPlaceholderConfigurer    
 * 类描述：    配置文件中的数据源加密
 * 创建人：lenovo    
 * 创建时间：2016年3月4日 下午4:38:33    
 * 修改人：lenovo    
 * 修改时间：2016年3月4日 下午4:38:33    
 * 修改备注：    
 * @version     
 *
 */
public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
            throws BeansException {
        try {
            Enumeration<?> list = props.propertyNames();//取得所有的property
            while (list.hasMoreElements()) {
                String propertyName = (String) list.nextElement();
                if (propertyName.startsWith("jdbc")
                        && (propertyName.endsWith("username") || propertyName.endsWith("password"))) {//认为以jdbc开头的，用户名密码全加密处理，此处为解密
                    String value = props.getProperty(propertyName);
                    if (value != null) {
                        props.setProperty(propertyName, new String(DesUtils.decryptByDES(value, null)));
                    }
                }
            }
            super.processProperties(beanFactory, props);
        } catch (Exception e) {
            e.printStackTrace();
            throw new BeanInitializationException(e.getMessage());
        }
    }
}
